library(tidyverse)
library(dbplyr)
library(dplyr)
library(ggplot2)
library(splitstackshape)
library(cowplot)
library(plotly)
library(knitr)
library(ggmap)
library(maps)
library(mapdata)
library(readr)
Lesum inn gögnin
setwd("~/Documents/Rstudio/Verk3/")
ki <- read.csv(file = 'data98.csv')
Hérna búum við til fall sem gefur lengdar- og breiddarbauga út frá tilkynningaskyldureitum
r2d <-function(r)
{
lat <- floor(r/100)
lon <- (r - lat * 100) %% 50
halfb <- (r - 100 * lat - lon)/100
lon <- - (lon + 0.5)
lat <- lat + 60 + halfb + 0.25
data.frame(lat = lat, lon = lon)
}
Hérna búum við til vigra sem innihalda lengdar- og breiddargráður
x<-r2d(ki$reit)$lon
y<-r2d(ki$reit)$lat
Næst skiptum við fiskunum eftir hafsvæðum
hafsvaedi <- ki$reit
for (i in 1:length(x)) {
if ((x[i] < -19.0) & (y[i] < 65.0)) {
hafsvaedi[i] = "SV"
}
else if ((x[i] < -19.0) & (y[i] >= 65.0)) {
hafsvaedi[i] = "NV"
}
else if ((x[i] >= -19.0) & (y[i] < 65.0)) {
hafsvaedi[i] = "SA"
}
else {
hafsvaedi[i] = "NA"
}
}
Að lokum búum við til vigur sem gefur til kynna hvort fiskurinn sé kynþroska eða ekki
kt2 <- hafsvaedi
for (i in 1:length(x)) {
if(ki$kt[i] == 1) {
kt2[i] = "okynthroska"
}
else {
kt2[i] = "kynthroska"
}
}
ki$kt2 <- kt2
Finnum fjölda kynþroska og ókynþroska fiska eftir hverju hafsvæði
kynco <- c(0,0,0,0)
for (i in 1:length(x)) {
if ((hafsvaedi[i] == "SV") && (kt2[i] == "kynthroska")) {
kynco[1] <- kynco[1]+1
}
else if ((hafsvaedi[i] == "SA") && (kt2[i] == "kynthroska")) {
kynco[2] <- kynco[2] + 1
}
else if ((hafsvaedi[i] == "NV") && (kt2[i] == "kynthroska")) {
kynco[3] <- kynco[3] + 1
}
else if ((hafsvaedi[i] == "NA") && (kt2[i] == "kynthroska")) {
kynco[4] <- kynco[4] + 1
}
}
okynco <- c(0,0,0,0)
for (i in 1:length(x)) {
if ((hafsvaedi[i] == "SV") && (kt2[i] == "okynthroska")) {
okynco[1] <- okynco[1]+1
}
else if ((hafsvaedi[i] == "SA") && (kt2[i] == "okynthroska")) {
okynco[2] <- okynco[2] + 1
}
else if ((hafsvaedi[i] == "NV") && (kt2[i] == "okynthroska")) {
okynco[3] <- okynco[3] + 1
}
else if ((hafsvaedi[i] == "NA") && (kt2[i] == "okynthroska")) {
okynco[4] <- okynco[4] + 1
}
}
Hérna búum við til einfaldan vigur sem geymir hafsvæðin fjögur
h <- c("SV", "SA", "NV", "NA")
Búum til töflu sem sýnir fjölda kynþroska og ókynþroska fiska eftir hverju hafsvæði
btafla <-tibble(h, kynco, okynco)
kable(btafla, col.names = c("Hafsvaedi", "Kynþroska", "Kynþroska"), align = "c")
| Hafsvaedi | Kynþroska | Kynþroska |
|---|---|---|
| SV | 508 | 221 |
| SA | 224 | 204 |
| NV | 394 | 934 |
| NA | 215 | 981 |
Finnum hlutfall milli kynþroska og ókynþroska fiska fyrir hvert hafsvæði
tafla1 <- data.frame(h, kynco, okynco)
Hérna reiknum við hlutfall kynþroska á móti ókynþroska fiska eftir hafsvæði
pkynco <- c(0,0,0,0)
for (i in 1:4) {
pkynco[i] <- (kynco[i])/(kynco[i]+okynco[i])
}
Tafla sem sýnir hlutfall milli kynþroska og ókynþroska fiska fyrir hvert hafsvæði
m <- tibble(h, pkynco)
kable(m, col.names = c("Hafsvæði", "Hlutfall kynþroska á móti ókynþroska"), align = "c")
| Hafsvæði | Hlutfall kynþroska á móti ókynþroska |
|---|---|
| SV | 0.6968450 |
| SA | 0.5233645 |
| NV | 0.2966867 |
| NA | 0.1797659 |
Búum til súlurit sem sýnir fjölda kynþroska og ókynþroska fiska fyrir hvert hafsvæði
p <- plot_ly(tafla1, x = tafla1$h, y = tafla1$kynco, type = 'bar', name = 'Kynþroska', marker = list(color = 'rgb(49,130,189)')) %>%
add_trace(y = tafla1$okynco, name = 'Ókynþroska', marker = list(color = 'rgb(204,204,204)'))
p
Gerum töflu sem sýnir fjölda fiska, meðallengd, meðalþyngd og staðalfrávik lengdar eftir aldri
tafla_a1 <- ki %>%
group_by(aldur) %>%
summarise(medallengd = mean(le, na.rm=TRUE))
tafla_a2 <- ki %>%
group_by(aldur) %>%
summarise(medalthyngd = mean(osl, na.rm=TRUE))
tafla_a3 <- ki %>%
group_by(aldur) %>%
summarise(stdlengd = sd(le, na.rm=TRUE))
fjoldi <- rep(0, 15)
for(i in 1:length(x)) {
for(j in 1:15) {
if (ki$aldur[i] == j) {
fjoldi[j] = fjoldi[j] + 1
}
}
}
fjoldi2 <- rep(0, 14)
for (i in 1:11) {
fjoldi2[i] <- fjoldi[i]
}
for (i in 13:15) {
fjoldi2[i-1] = fjoldi[i]
}
taflac <- tibble(tafla_a1$aldur, fjoldi2, tafla_a1$medallengd, tafla_a2$medalthyngd, tafla_a3$stdlengd)
kable(taflac, col.names = c("Aldur", "Fjöldi", "Meðallengd", "Meðalþyngd", "Staðalfrávik lengdar"), align = "c")
| Aldur | Fjöldi | Meðallengd | Meðalþyngd | Staðalfrávik lengdar |
|---|---|---|---|---|
| 1 | 3 | 22.66667 | 102.0000 | 2.081666 |
| 2 | 76 | 26.30263 | 165.5395 | 3.723868 |
| 3 | 632 | 38.55063 | 529.3180 | 5.277765 |
| 4 | 367 | 51.26158 | 1339.2316 | 7.902564 |
| 5 | 1211 | 61.44426 | 2132.9744 | 6.819454 |
| 6 | 750 | 71.43333 | 3424.9480 | 8.701102 |
| 7 | 262 | 79.19466 | 4767.2710 | 8.877858 |
| 8 | 209 | 85.25837 | 6407.2871 | 9.991354 |
| 9 | 135 | 88.51852 | 7266.0667 | 9.816109 |
| 10 | 27 | 93.85185 | 9392.5185 | 12.877242 |
| 11 | 6 | 93.66667 | 10665.3333 | 24.311863 |
| 13 | 1 | 132.00000 | 28282.0000 | NA |
| 14 | 1 | 145.00000 | 34484.0000 | NA |
| 15 | 1 | 110.00000 | 12750.0000 | NA |
Í töflunni hér fyrir ofan sést fjöldi, meðallengd, meðalþyngd og staðalfrávik lengdar eftir aldri
Hér fyrir neðan er mynd sem sýnir lengd fiska eftir aldri þegar litið er á aldur sem samfellda breytu auk meðallengd fiska fyrir hvern aldurshóp sem stærri rauða punkta
qplot(ki$aldur, ki$le, ) + geom_hline() + geom_smooth(method=loess, color = "blue") + xlab("Aldur") + ylab("Lengd") + labs(caption="") + geom_point(data=taflac$tafla_a1$medallengd, mapping=aes(x = taflac$`tafla_a1$aldur`, y = taflac$`tafla_a1$medallengd`), col="red", size=2.2)+
theme(plot.caption = element_text(hjust=0.5, size=rel(1.2)))
## `geom_smooth()` using formula 'y ~ x'
Kassarit sem sýnir lengd fiska eftir aldri þegar litið er á aldur sem strjála breytu
ggplot(ki,mapping = aes(x=aldur,y=le, group=aldur))+geom_boxplot()+xlab('Aldur')+ylab('Lengd')
Eins og sést á myndini fyrir ofan er þó nokkrir útlagar.
Hvor mynd hefur sýna kosti, punktaritið sýnir vel þróun á lengd eftir aldri á meðan kassaritið sýnir dreifingu á lengd fyrir hvern aldur.
Veljum tvö hafsvæði af handahófi
set.seed(3008)
(ivan <- sample(ki$reit,1))
## [1] 623
set.seed(0411)
(kolli <- sample(ki$reit,1))
## [1] 666
Veljum 50 fiska af handahófi af hvoru hafsvæði
set.seed(3008)
ivan_t <- ki
ivan_t <- filter(ivan_t, reit == 623)
ivan_t_50 <- sample_n(ivan_t,50)
set.seed(0411)
kolli_t <- ki
kolli_t <- filter(kolli_t, reit == 666)
kolli_t_50 <- sample_n(kolli_t,50)
Sameinum fiskana í einn gangaramma
samtafla <- rbind(kolli_t_50, ivan_t_50)
Hérna erum við að kanna hvort munur sé á meðallengd fiska á hafsvæðunum tveimur. Við notum tvíhliða t-próf með 95% marktæknikröfu. Við setjum fram tilgátunar:
\(H_0:\) Hafsvæðið hefur ekki áhrif á meðallengd fiska þ.e. \(\mu_1 = \mu_2\)
\(H_1:\) Hafsvæðið hefur áhrif á meðallengd fiska þ.e. \(\mu_1 \neq \mu_2\)
Við getum notað þetta tilgátupróf vegna þess að gögnin fylgja normaldreifingu sem er undirstaða fyrir t-prófið.
t0 <- t.test(samtafla$le~samtafla$reit, mu = 0, alt = "two.sided", conf = 0.95, var.eq = T, paired = F)
t0
##
## Two Sample t-test
##
## data: samtafla$le by samtafla$reit
## t = 1.3425, df = 98, p-value = 0.1825
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -2.084966 10.804966
## sample estimates:
## mean in group 623 mean in group 666
## 56.72 52.36
Við fáum t-gildið 1.3425 sem sýnir að meðaltölin eru 1.3425 staðalfrávikum frá hvort öðru. P-gildið er 0.1825 sem segir okkur að það voru 18.25% líkur á að fá þessa niðurstöðu. Þetta bil er stærra heldur en 5% höfnunarsvæðið þannig að við samþykkjum \(H_0\). 95% öryggisbilið er frá -2.08 til 10.80. Öryggisbilið inniheldur 0 vegna þess að við samþykkjum núlltilgátuna og líklegt er að það er enginn mismunur á meðllengd fiska eftir hafsvæði.
ki$hafsvaedi <- hafsvaedi
Teiknum stuðlarit af lengd fiskanna fyrir hvert hafsvæði með lengdarmælingar úr upphaflega gagnasafninu og bætum inn á stuðlaritin þéttleikafall þeirra
ggplot(ki, aes(x=le)) + geom_histogram(aes(y=..density..), colour="black", fill="white", binwidth = 3) + geom_density(alpha=.2, fill="#FF6666", color = "red") + xlab('Lengd') + ylab('Fjöldi %') + facet_wrap(~ hafsvaedi) + labs(caption="") +
theme(plot.caption = element_text(hjust=0.5, size=rel(1.2)))
Eins og sést á myndunum fjórum fylgja þær normaldreifingu sem gefur til kynna að flestir fiskar eru í kring um meðallengd og fara þeir fækkandi því nær dregur endapunktum. Þetta gerir okkur einnig kleift að nota t-próf á gögnin.
Hérna framkvæmum við 5000 mismunandi t-próf með slembnum stökum
t_vector <- replicate(5000, t.test(samtafla$le[sample(1:length(samtafla$le))]~samtafla$reit )$statistic
)
pefri <- 0
for (i in 1:5000) {
if ( abs(t_vector[i]) > t0$statistic) {
pefri <- pefri +1
}
p <- pefri/5000
}
p
## [1] 0.1912
Með því að framkvæma slembivalspróf fyrir hafsvæðin tvö fáum við p-gildið 0.192. Þetta segir okkur að það eru 19.2% líkur á að við fengum þessu niðurstöðu. Ef við gerum 95% marktæknikröfu þá er niðurstaðan fyrir utan höfnunarsvæðið þannig hægt er að álykta það að enginn marktækur munur er á meðallengd fiska eftir hafsvæðunum tvem. P-gildið sem við fengum úr t-prófinu er 0.183 en p-gildið úr slembivalsprófinu er 0.192. Þessar tölur gefa sömu niðurstöðu þ.e. það er enginn marktækur munur á hafsvæðunum.
Hérna búum við til vigur sem inniheldur kynþroska fisksins sem tölubreyti þ.e. ef fiskurinn er ókynþroska fær hann gildið 1 en ef hann er kynþroska fær hann gildið 2
kt3 <- samtafla$kt
for (i in 1:100) {
if (samtafla$kt[i] == 1) {
kt3[i] <- 1
}
else {
kt3[i] <- 2
}
}
samtafla$kt3 <- kt3
Hérna búum við til vigur yfir fjölda kynþroska fiska eftir hafsvæði
kynco_1 <- c(0,0)
for (i in 1:100) {
if ((samtafla$reit[i] == "623") && (samtafla$kt2[i] == "kynthroska")) {
kynco_1[1] <- kynco_1[1] + 1
}
else if ((samtafla$reit[i] == "666") && (samtafla$kt2[i] == "kynthroska")) {
kynco_1[2] <- kynco_1[2] + 1
}
}
Hérna búum við til vigur yfir fjölda ókynþroska fiska eftir hafsvæði
okynco_1 <- c(0,0)
for (i in 1:100) {
if ((samtafla$reit[i] == "623") && (samtafla$kt2[i] == "okynthroska")) {
okynco_1[1] <- okynco_1[1] + 1
}
else if ((samtafla$reit[i] == "666") && (samtafla$kt2[i] == "okynthroska")) {
okynco_1[2] <- okynco_1[2] + 1
}
}
hafsvaedi_1 <- c("623","666")
Hér fyrir neðan er tafla sem sýnir fjölda kynþroska og ókynþroska fiska eftir hafsvæði
tafla_h <- tibble(hafsvaedi_1,okynco_1,kynco_1)
kable(tafla_h, col.names = c("Hafsvæði", "Óynþroska", "Kynþroska"), align = "c")
| Hafsvæði | Óynþroska | Kynþroska |
|---|---|---|
| 623 | 41 | 9 |
| 666 | 39 | 11 |
Af töflunni fyrir ofan er hægt að álykta að lítill munur er á hlutfalli kynþroska á mót ókynþroska fiska miðað við hafsvæði
Gerum t-próf til að kanna ályktunina.
\(H_0:\) Enginn munur er á hlutfalli á kynþroska á móti ókynþroska fiska milli hafsvæða þ.e. \(\mu_1 = \mu_2\)
\(H_1:\) Munur er á hlutfalli kynþroska á móti ókynþroska fiska milli hafsvæða þ.e. \(\mu_1 \neq \mu_2\).
t1 <- t.test(samtafla$kt3~samtafla$reit, mu = 0, alt = "two.sided", conf = 0.95, var.eq = T, paired = F)
t1
##
## Two Sample t-test
##
## data: samtafla$kt3 by samtafla$reit
## t = -0.49559, df = 98, p-value = 0.6213
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -0.2001686 0.1201686
## sample estimates:
## mean in group 623 mean in group 666
## 1.18 1.22
Við fáum t-gildið -0.496, p-gildið 0.621 og öryggisbilið er frá -0.20 til 0.12. P-gildið segir okkur að það eru 62.13% líkur á að fá þessa niðurstöðu og öryggisbilið inniheldur 0 sem segir okkur að líklegt er að það er enginn munur á hlutfalli kynþroska á móti ókynþroska eftir hafsvæði.
Hérna notum fyrra hafsvæðið og teiknum punktarit á venjulegum kvarða. Rauða línan er jafna besta ferils með óvissu.
qplot(ivan_t_50$le, ivan_t_50$osl) + geom_hline() + geom_smooth(method=loess, color = "red") + xlab("Lengd") + ylab("Þyngd") + labs(caption="") +
theme(plot.caption = element_text(hjust=0.5, size=rel(1.2)))
## `geom_smooth()` using formula 'y ~ x'
Hérna teiknum punktarit af sama hafsvæði nema með log-log kvarða. Rauða línan er jafna besta ferils með óvissu.
qplot(ivan_t_50$le, ivan_t_50$osl, log ="xy") + geom_hline() + geom_smooth(method=loess, color = "red") + xlab("Lengd") + ylab("Þyngd") + labs(caption="") +
theme(plot.caption = element_text(hjust=0.5, size=rel(1.2)))
## `geom_smooth()` using formula 'y ~ x'
Bý til nýjan gagnaramma sem inniheldur logrann af þyngd og lengd fiskanna.
log_le <- log(ivan_t_50$le,10)
log_osl <- log(ivan_t_50$osl, 10)
log_df <- tibble(log_le,log_osl)
rm(log_le)
rm(log_osl)
Hér smíði ég aðhvarfsgreiningarlíkan sem spáir þyngd fisks út frá lengd á log-log skala.
fit <- lm(log_le~log_osl, data = log_df)
fit
##
## Call:
## lm(formula = log_le ~ log_osl, data = log_df)
##
## Coefficients:
## (Intercept) log_osl
## 0.6842 0.3374
Aðhvarfsgreiningarlíkanið segir að lengd fylgi best línunni með jöfnunni:
\(lengd = 0.6842 + 0.3374 \cdot þyngd\)
Hér fyrir neðan sést mynd af líkaninu
ggplot(log_df, aes(log_le, log_osl)) +
geom_point() +
stat_smooth(method = lm)
## `geom_smooth()` using formula 'y ~ x'
Lengd og þyngd fisks fylgir að eðli sínu lógarithmískum skala þannig ef við teiknum mynd af fylgninni á log-log skala eins og sést hér fyrir ofan myndast góð línuleg fylgni sem létt er að lesa af. Þetta er ástæða af hverju það er oft sniðugt að nota log-log skalann.
Hér fyrir neðan er mynd sem sýnir fylgni á þyngd og lengd fiska þar sem þyngd er háða breytan á log-log skala.
ggplot(log_df, aes(log_osl, log_le)) +
geom_point() +
stat_smooth(method = lm, color = "red",se = FALSE)
## `geom_smooth()` using formula 'y ~ x'
Hérna er mynd sem sýnir fylgni og lengd fiska þar sem þyngd er háða breytan á venjulegum skala.
ggplot(ivan_t_50, aes(osl,le)) +
geom_point() + geom_smooth(method = "loess")
## `geom_smooth()` using formula 'y ~ x'
Eins og sést fyrir ofan þá er ekki línulegt samband milli þyngdar og lengdar.
Búum til aðhvarfsgreiningarlíkön fyrir gögnin okkar. litid gefur okkur bestu línu í gegnum alla punktana, stort gefur okkur margar bestu línur þar sem litið er á aldur sem flokkabreytu, þ.e. fáum jöfnu línu fyrir hvern aldur.
litid <- lm(le~aldur, data=ivan_t_50)
stort <- lm(le~factor(aldur), data=ivan_t_50)
Hér fyrir neðan sést kassarit sem sýnir hvernig lengd fiska dreifist aldri.
ggplot(ivan_t_50,mapping = aes(x=aldur,y=le, group=aldur))+geom_boxplot()+xlab('Aldur')+ylab('Lengd')
Hér sést puntkarit sem sýnir einnig hvernig lengd dreifist aldri ásamt jöfnu besta ferils auk óvissu.
ggplot(ivan_t_50, aes(aldur,le)) +
geom_point() + geom_smooth(method=loess)
## `geom_smooth()` using formula 'y ~ x'
Hérna eru aðhvarfsgreiningarlíkönin
litid
##
## Call:
## lm(formula = le ~ aldur, data = ivan_t_50)
##
## Coefficients:
## (Intercept) aldur
## 18.751 7.655
stort
##
## Call:
## lm(formula = le ~ factor(aldur), data = ivan_t_50)
##
## Coefficients:
## (Intercept) factor(aldur)3 factor(aldur)4 factor(aldur)5
## 25.00 12.83 23.00 34.26
## factor(aldur)6 factor(aldur)7 factor(aldur)9 factor(aldur)11
## 41.09 56.00 61.00 59.00
Búum til anova töflu
anova(litid, stort)
## Analysis of Variance Table
##
## Model 1: le ~ aldur
## Model 2: le ~ factor(aldur)
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 48 2038.8
## 2 42 1293.4 6 745.41 4.0342 0.002797 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Við fáum p-gildið 0.002797 sem segir okkur að það sé yfirgnæfandi líkur á að það sé fylgni milli lengd og aldurs. Einnig sést á myndunum tvem fyrir ofan sérstaklega í punktaritinu að það er jákvæð fylgni milli lengds og aldurs.